Distributed computer storage systems aggregate and organize storage resources provisioned or attached at many computing systems or devices, making such computing systems or devices available, in turn, to a plurality of computing systems. In particular, storage management systems rely on capabilities of an underlying distributed computer storage system to construct logical or virtual storage units, making use of potentially many underlying physical storage elements, at potentially many computing devices on a fabric or network, in response to administrative policy. In addition, distributed computer storage systems must address the problem of directing requests to read or write data to the node designated to store that data. Further, distributed systems, particularly those including large numbers of users or large amounts of data, must contend with problems of reliability and performance.
Many systems use replication (the storage of multiple copies of an object) or parity schemes (storage of programmatically generated objects that can be used in combination with some number of remaining objects to recover one or more lost objects) to improve reliability. Such schemes become more advisable as both volumes of data and number of nodes in a storage and retrieval system grow, as the likelihood of a data error increases with the amount of data stored.
A “volume” is a logically addressable storage unit assembled from some set of underlying storage elements, according to some algorithm. Such an algorithm may be referred to as a “data placement function.” In contrast with traditional logical volume managers (e.g., CMS MiniDisks, HP or Linux logical volume managers) and in contrast with RAID systems, a data placement function is mathematically general; it may involve computation (e.g., hashing), it may accept a variety of inputs or heuristics, including ones from higher-level systems (e.g., file or object storage systems), and may be sensitive to properties of an environment and/or of the data being stored.
To support efficient addressing of logical data blocks from independent computing devices, data placement functions may be globally known. However, using a globally known function to determine data placement, has drawbacks. Current placement techniques use a single static data placement function, or some family of functions each selecting one set from a family of parameters. These techniques are static in that the family of functions available to them is heavily constrained and determined by the architecture adopted in the development of the system. Current techniques also assume homogeneous hardware and homogeneity in client access across the objects in a collection. However, tiered storage systems assembled from diverse media are common, e.g., storage systems may include tape, magnetic and optical discs, non-volatile solid-state devices, and volatile DRAM devices, each with its own performance and reliability characteristics. Different objects within a set also serve differing patterns of access, from repeatedly and widely watched media files requiring high speed, low-latency sequential read access to databases requiring durability and good performance under multiple, contending writers.